第五期:扩展 NAS 之远程访问
如何「远程访问 NAS」是一个经常被人提及的话题,因为一旦实现,就能让前几章提到的功能不再局限于局域网内,让 NAS 真正成为一台可以随时随地访问的云设备,大大提升 NAS 的便利性。
与之对应的,便是远程访问 NAS 这一问题本身的复杂性。
与前几章不同,在 NAS 上安装各类服务只需保证机器正常运转,局域网内的路由器、网线、电脑不出问题。而远程访问则涉及到诸多问题——远程访问 IP、端口映射、内网穿透、线路是否通畅。在国内还需要考虑公网 IP、端口转发、上下行速度等额外的问题。这些问题中,有的缺一不可,有的影响体验,有的无伤大雅……这些术语显得有些复杂,但不必担心,它们都会在本章中得到解答。
远程访问的几种思路
很多初上手 NAS 的用户会发现,单靠网上的一篇篇文章并不能很好地解决「远程访问」的问题,所以往往是参考了很多文章,试了很多种方法,绕了很多弯路,才实现了远程访问。这是因为有不少分享者更重视解决眼下问题,而非成体系地讲解如何在国内的复杂环境下、以多种方式实现远程访问。
「远程访问到底为什么这么难?」其实是因为缺乏对整体的思路,很容易被大量的专业术语整晕。因此我希望大家能认真阅读这段内容,然后再根据自己的实际情况实现远程访问,少走一些我当时走过的弯路。
在一切开始之前,需要注意第一章就让大家准备起来的两个关键点:公网 IP 和上传速度。
为了更快的访问速度,提升上传速度很容易理解,毕竟谁都想要更快的网速。
为什么拥有一个公网 IP 如此重要呢?因为这个公网 IP 的有无,直接决定了你需要采取什么样的方法来实现远程访问。本期文章的所有内容都因它而起。
如何区分多种 IP 地址的概念
讲到 IP 地址会引出很多概念,这里只挑最关键的两组概念简单讲解——
公网与内网 IP:
- 公网 IP:可以从任意位置访问的 IP 地址。
- 内网 IP:只有局域网内可以访问(有时候整个小区或宿舍楼共用一个 IP 地址,因而无法从外部访问内部设备,这种情况下也算是内网 IP)。
静态与动态 IP:
- 静态 IP:固定的 IP 地址,通常由企业付费持有。个人很难持有一个 IPv4 的静态 IP 地址。
- 动态 IP:随着路由器重启而改变的动态 IP 地址。这让个人很难直接用 IP 地址远程访问 NAS。
如何区分多种 IP 地址概念
最理想的情况下,我们当然希望有一个「公网 + 静态 IP」,这样我们就能直接通过类似 109.31.12.18:5000
这样的 IP 地址 + 端口访问到 NAS 的管理界面了,远程访问的问题就解决了。
但是事与愿违,首先是静态 IP 非常稀缺,通常是大企业付费获得。运营商认为普通用户只需要上网,用动态 IP 就能够满足绝大多数的上网功能,并且大大缓解了 IP 地址不够用的压力。
这就产生了第一个问题:动态 IP 难以访问。比如我的 NAS IP 地址今天是 109.31.12.18:5000
,路由器一重启就变成了 50.38.201.78:5000
,这个变化并没有规律可循。这就让事情变得复杂了。
第二个问题在于公网 IP,国内运营商出于某些考虑,不允许人人在自家随便开放网站服务,因此默认是不给公网 IP 的,并且封闭了 80、443 等常用的网页访问端口。不给公网 IP 可以打电话找运营商要一个,但外网端口就需要自己搞定了。
这就是整篇文章的两个核心问题,本文接下来的一切方案都是为了解决这两个问题。
如何解决动态 IP 问题
为了解决动态 IP 的问题,让自己更方便地从外网访问到 NAS,NAS 厂商和用户都找了各种各样的方法。
动态IP的概念
方案一:群晖作为厂商,敏锐地意识到了这个问题,因此提供了非常方便的方案,也就是 QuickConnect 服务。QuickConnect 使用起来非常简单,用户只需要在 NAS 上设置一个独一无二的 QuickConnect ID,通过群晖提供的 https://ID.quickconnect.to
服务,就可以直接找到对应 ID 的 NAS IP 地址,从而实现远程访问。
方案二:用户也找到了自己的路子,不借助群晖的服务也能实现远程访问——「申请一个域名,让 NAS 自动上报最新的 IP 地址,用域名访问 NAS」,这种思路叫「域名解析 + DDNS」。这一方案体验也非常不错,难点在于国内做域名解析是需要备案的,并且购买域名通常是要每年付费的,配置过程会涉及到一些代码知识。
这方面群晖也提供了一些免费的 DDNS 网址,比如 https://ID.myds.me
,访问时可以免去等待 QuickConnect 查询的步骤,所以使用时会稍快一些。
如何解决无公网 IP 问题
如果说动态 IP 是几乎每个国内 NAS 用户都需要解决的问题。那么,有没有公网 IP,则直接决定了你外网访问的难度。
为了解决公网 IP 的问题,让 NAS 「能」从外网访问,最快的方法就是我第一期提到的——「找运营商开启这个服务」。
公网IP
至于如何确认是否已经有了公网 IP,你可以通过 IP 查询网站如 ipip.net 来查询自己的 IP 地址是动态还是静态(通常是动态),通过路由器后台查询 WAN IP 地址是否与之一致,一致则说明已有公网 IP。(可以回到第一章查看如何查询和申请公网 IP 的具体方法。)
但如果没有办法申请到公网 IP,事情就会变得比较复杂,你需要实现「内网穿透」。这需要购买域名、租一台外部服务器,实现 DDNS 的中转,并且配置工作非常冗长。不过也有一些服务商是专门为「无公网 IP 用户」解决内网穿透问题的,如果嫌麻烦可以直接付费购买此类服务图个省心。
而也有一些没有公网 IP 的情况属于硬件层面无法实现的,比如校园网就几乎不可能允许你从外网访问。
如何解决内网配置问题
这两个核心问题解决了,就一定能够从外网访问了吗?未必,因为每个人的路由器配置还不太一样。很多人做了 DDNS 和内网穿透,也还是不能远程访问。这就好比客人已经找到家门口,路由器却把客人拦住了,不让客人碰家里的东西。
这往往是因为路由器配置不正确,需要做「端口映射」操作,让客人能够从外部触碰指定的几个功能,而不是全权开放给客人。端口映射也可以绕过运营商对 80、443 等端口的封锁。
端口映射
还有就是向运营商申请提升上行速度,如果你经常需要在外网读取 NAS 中的大文件,这时候就要看局域网的上传带宽了。如果家中是 10 兆的上传带宽,那么在外网下载速度就是 1.25 MB/s,用来看高清视频恐怕比较费劲。这就属于花钱改套餐能解决的用户体验问题。
正因为可能出现问题的环节如此之多,才导致了远程访问配置起来这么复杂。本文会尽可能完整地描述同类问题的解决思路,一些具体的配置过程需要大量的图文会更有帮助,篇幅所限,我会给出相应的文章链接供大家参考。
远程访问 NAS 的自动配置方案
正如前面所说,网络环境千差万别。做了相同的操作也会出现不同的问题。如果一上来就讲如何操作而不讲原理,那就无法学会自己排查网络中出现的问题。
首先我们要知道,想要从外部网路访问到自家 NAS,并不是一键直达的。同样是「打开手机访问家中的 NAS」这一操作,对用户而言看似只有「能访问」和「不能访问」这两种情况。但实际上流量会经过多个关键性节点才能完成这一跳转,我来举两个常见的例子方便大家理解。
外网访问流程
- 你用手机打开浏览器 → 访问家中路由器 IP 地址 → 网络通过 IP 找到家中路由器 → 路由器找到局域网内的 NAS 设备 → NAS 提供数据原路返回 → 手机获得数据。
- 你用手机打开浏览器 → 访问 NAS 的 QuickConnect 码 → 通过群晖服务器解析到家中 IP 地址 → IP 对应路由器 → 路由器找到 NAS 设备 → NAS 提供数据原路返回 → 手机获得数据。
从中我们可以发现,数据至少经过了「手机 - IP - 路由器 - NAS」这几个阶段,难点就在这几个地方。如果你不想面对这些难点,群晖已经提供了很不错的解决方案:QuickConnect。
方案一:QuickConnect 方案(群晖)
QuickConnect 是群晖独家的服务,是目前外网访问 NAS 最简单易用的方案之一。它的作用是通过一串「唯一的代码」来快速访问到家中的 NAS。群晖自家的 App 都支持 QuickConnect 来直接访问。
QuickConnect 码的作用
申请 Synology 账号
这一步应该在初次打开 NAS 的时候就注册过了,如果还没有账号,可以在群晖的官网进行账号申请。
申请 QuickConnect ID
接着就是在 NAS 的控制面板中设置 QuickConnect ID。打开 NAS 网页版 - 控制面板 - QuickConnect - 启用。
设置QuickConnect
填写一个唯一的 ID 码,以后就可以通过这个 ID 码来访问 NAS 了。
通过 QuickConnect 访问 NAS
外部访问 NAS 有两种场景,一种是通过浏览器,一种是通过 App。
在设置完 QuickConnect 后,下方就会出现提示,告诉你如何访问这台 NAS。
- 浏览器访问:
https://ID.quickconnect.to
(ID 为刚刚输入的代码)或https://quickconnect.to/ID
,稍等一会儿就能进入 NAS 的管理界面。 - App 访问:在登录界面的 QuickConnect 码一栏输入 ID,账号密码均为 NAS 网页端账号密码。
QuickConnect连接
QuickConnect 不适用的情况
QuickConnect 能自动解决大部分问题且不需要做额外设置,但并非十全十美,它不能保证让你 100% 实现外网访问。
第一章我就提到过,由于运营商限制,如果 NAS 处于公用网络(校园网、宿舍网、公共场所局域网)、使用路由光猫作为主路由器、小区共用 IP、偏远位置等特殊网络环境下,网络本身不具备外网访问的条件,自然也无法通过 QuickConnect 访问,甚至无法通过任何方式从外部访问。
另外,由于访问到你的 NAS 前需要做一次跳转,https://ID.quickconnect.to
并不是 NAS 的真实链接,所以不支持通用协议 WebDAV。如果你想在支持 WebDAV 的应用中使用 NAS 作为存储位置,那就需要准备其他的方式了。
还有一种情况是 QuickConnect 能够跳转但无法显示内容,这种通常是正确解析到了路由器的 IP 地址,但由于路由器设置不正确,无法通过路由器找到 NAS。群晖的服务器通常没有问题,那么问题显然出在路由器到 NAS 这一步上。通常需要在路由器的设置界面正确设置端口转发、端口映射、开启 DMZ 功能、开启 UPnP 功能(如果没有设置项,可能默认开启,也有可能不支持,需要更换路由器),这些问题会在后面讲到路由器设置时详细讲解。
QuickConnect 是我最推荐的方案之一,能以最省心的方式在外网访问到 NAS。
方案二:EZ-Internet 方案
当 QuickConnect 无法满足需求时,就需要寻求其他的方案来实现外网访问了。
群晖提供了另一项功能 EZ-Internet,能够帮助用户快速解决网络环境下的各种问题,对防火墙规则、PPPoE、DDNS、端口转发这些问题一次性解决,简化了手动操作。即便你对这些名词完全不了解,也能完成配置。
我们先通过 EZ-Internet 进行一遍设置,如果无法解决,再到路由器端进行手动设置。
由于 EZ-Internet 的很多操作是在路由器端进行,路由器需要支持 UPnP 功能才能通过 EZ-Internet 进行设置。如果不支持,则至少需要支持手动设置端口转发。
具体操作:
- 访问 DSM 网页端,进入系统自带的 EZ-Internet 设置向导。
- 一般来说我们选择「通过路由器」这一项,如果家中有条件直接插上网线连接网络,则选择「PPPoE 或直接连接」这一选项。
- 之后根据实际情况进行「端口转发」「防火墙」「DDNS」的设置。这跟路由器也有关,经过 EZ-Internet 的检查后,参考它的结局方案来排查问题。比如图中需要联系电信将光猫改为桥接模式。
EZ-Internet
完成设置之后,就可以通过外网进行访问了。
使用 EZ-Internet 需要注意以下几点——
- EZ-Internet 会将路由器原本的端口转发规则覆盖。
- 如果进行 EZ-Internet 设置后仍然无法正常外部访问,就需要手动进行路由器设置。如路由器不支持,则建议更换路由器。
- EZ-Internet 可以和 QuickConnect 共存,可以同时启用。
方案三:第三方付费服务
市面上其实有不少第三方的外网访问解决方案,这些付费服务商通过自己的服务器也能搞定外网访问的大多数问题。体验与群晖的 QuickConnect 比较接近。
这类服务有不少,像花生壳、网云穿、神卓互联等都是内网穿透的服务商。它们的原理通常是在本机电脑或 NAS 上安装一个客户端;或者购买一个硬件设备放在局域网中,实现 IP 地址的动态调整。
花生壳内网穿透方案 / 来自官网介绍
这样的好处是不需要公网 IP、操作简便、管理方便、实现远程访问 NAS 之外还能远程访问 PC,适合追求稳定的企业级客户使用。部分服务商还会提供一些便于访问的域名。
代价则是每年支付服务订阅费用,每年数百元的价格对家庭用户而言并不算低。
如果你不愿意为此付款,希望选择免费开源的服务,那就需要花时间折腾和配置,需要一定的网络和调试基础。
远程访问 NAS 的手动配置方案
群晖、第三方的解决方案确实解决了各种各样的问题,尽可能地减少了用户的操作。让所有用户不必考虑路由器、外部网络环境等因素,想必是群晖的目标之一。
不过在目前这个各家厂商、各个用户的软硬件差异极大的时代,实现这一目标就需要产生统一的协议或标准,目前看起来仍需时日。因此手动配置方案依然值得一讲。
在手动配置之前……
与自动配置不同,手动配置会涉及到各种网络知识,引出不少专业名词,其中的每一点都需要大量的网络知识作为支撑,所以我会在不涉及到背后复杂的原理的情况下,尽量用通俗的语言为大家讲解,从实用的角度为大家提供建议。
手动配置方案
手动配置方案可以分为两种情况:
- 有公网 IP 时,使用 DDNS 方案(方案四)
- 无公网 IP 时,使用内网穿透方案(方案五)
💡 TIPS:关于专业名词
很多人初次查阅各种资料时,经常被各种专业名词/术语整懵,因为这些名词不加以解释,就很难明白它们的实际作用和想要实现的目标。如果只是一步一步跟着做,那就无法针对自己的网络环境进行灵活变通。
为了让大家的阅读体验更流畅,这里做一个对专业名词的快速介绍,以及它们可以完成什么样的工作,方便大家理解这些名词的含义。
这些手动配置方案中会提到不少专业名词,我会以这种 TIPS 的形式进行补充。
方案四:有公网 IP 时,DDNS 方案
脱离了自动配置方案的帮助,我们遇到的第一个问题就是上面讲到的动态 IP。
只要理解了 IP 和域名之间的对应关系,我们就会知道——如果希望通过一个域名来访问家中的路由器,那就需要将家中路由器的 IP 地址与这一域名绑定。
💡 TIPS:IP 与域名对应,实现基本访问
这是网络中最基础的概念,IP 和域名存在对应关系,理解了这一层,才能实现最基本的通过 IP 访问 NAS。
- IP 地址:网络中用于确定一台设备的逻辑地址,就像这台设备的手机号,形如
48.211.120.52
。 - 域名:域名是 IP 地址的别称,域名会通过 DNS 解析成 IP。就像与手机号对应的名字,形如
google.com
。 - 解析:可以简单理解为 IP 和域名的处理过程,将域名转化为 IP。
- DNS:DNS 记录着大量域名和 IP 的对应关系,就像一本厚厚的通讯录。比如从外部访问
sspai.com
时,首先通过 DNS 找到sspai.com
的 IP 地址是119.23.141.248
,然后将你导航到这个 IP 地址上,完成访问。 - DDNS:DNS 是域名解析服务,DDNS 是动态域名解析服务。DDNS 的作用是将一个域名和动态的 IP 地址绑定起来,每次用户访问域名时,跳转的 IP 都是最新的 IP 地址。这是一个更智能的通讯录。比如
powerplus.myds.com
昨天的 IP 是210.12.101.75
,今天由于路由器重启,变成了另一个119.23.141.248
。借助 DDNS 技术,从外部访问时总能导航到正确的、最新的119.23.141.248
。群晖的 QuickConnect 服务就提供了类似的功能。
如果想通过「域名」这一简单的方式来访问 NAS,就需要用到 DDNS 来保证域名和 IP 是对应的。
如果想通过 IP 直接访问 NAS,你就需要经常去关注 NAS 的外网 IP 是否有变动,这显然不现实——谁会没事检查一下 IP 地址有没有变化呢。
如果想按照对待服务器的方法,通过域名映射到 NAS IP 的固定值,那么一旦重启路由器就需要域名的配置,重新进行域名解析……这也太麻烦了。
因此这项工作就要由 DDNS(动态域名服务)和端口转发这一组合来完成,通常需要这几个步骤:
- 购买自定义域名(或使用群晖提供的免费域名)
- 配置 DDNS
- 配置端口转发
群晖本身提供了一些 DDNS 域名,可以用 myDS.me 这类较短的域名进行配置。
域名分支一:使用群晖提供的免费域名
群晖官方提供了一些免费域名,在「NAS 网页端 - 控制面板 - 外部访问 - DDNS - 新增」中,可以选择服务提供商 Synology,这里给出的 myDS.me
、i234.me
、FamliyDS.com
等域名后缀都是可以免费使用的。
域名服务
选择完喜欢的域名后缀,再输入一个主机名称,比如 allen.myds.me
。然后分别填入用户名、密码。剩余的外部链接、状态会自动填入和检测。保存即可。
域名分支二:使用自定义的域名
如果不想用群晖官方的域名,那就需要购买一个。
如今,购置域名已经变得非常容易,在域名服务网站(如 DNSPod)上购买一个不常见的域名(热门域名价格较高),一年的价格在 50–80 元之间。如果选择非 .com
结尾的域名,如 .fun
、.link
这种冷门域名,还能进一步降低成本。
几个注意点:
- 同一个域名,在不同的域名服务网站购买,价格也有所不同,注意比较。
- 也有一些免费的域名服务商,但要警惕它们的后续收费和域名所有权问题,不推荐选择免费服务商。
至于域名名称,根据自己的喜好进行设定和购买就可以了。
购买完成后,一般步骤如下
- 添加一条 A 记录域名解析,比如
nas.allen.com
,这个就是主机名,其中的前缀可以自行定义。 - 根据官网提示申请 API Token,API Token 包含 DDNS 设置所需的用户名和密钥。
- 同样在「NAS 网页端 - 控制面板 - 外部访问 - DDNS - 新增」中选择服务提供商为你的服务商(如 DNSPod.cn),主机名称就是上面的
前缀.域名.com
。
Token填写
💡 TIPS:Token 的获取
部分服务商(如阿里云)是利用 Access Key Id 和 Access Key Secret 来生成 DDNS 所需的 Token 的,需要额外自行下载 SDK 和命令行来生成,提高了安全性但也大大增加了工作量。
建议在购买时就选择 DNSPod 等直接生成可用的 Token 的域名服务商,有助于我们在 NAS 中快速配置。
域名分支三:非群晖 NAS 使用自定义域名
如果是非群晖的 NAS,则需要在 NAS 上编写脚本,通过 API 的方式每隔 1 小时更新一次解析的 IP 地址,实现 DDNS。
不同的机型有不同的配置方案,这部分难以涵盖所有情况,这里举 DNSPod 的例子来讲。
首先我们在域名控制台添加一条域名解析 A 记录,IP 地址为目前 NAS 的公网 IP。
为了让这条 A 记录动态改变,我们要通过 API 对它进行实时更新。所以需要获取这条 A 记录的「记录 ID」。
你可以通过运行这段 Python 脚本来获取「记录 ID」,其中带
【】
的内容是需要修改的。
# -*- coding: UTF-8 -*-
import urllib2,urllib
data={'login_token':'【API Token ID】,【API Token 密钥】','format':'xml','domain':'【域名】'}
content_stream = urllib2.urlopen("https://dnsapi.cn/Record.List",data=urllib.urlencode(data))
content = content_stream.read()
print content
完成后,DNSPod 会返回一个 XML 文件,其中包含一个 ID 值,有了这个 ID 值,我们就可以通过计划任务来实时更新这条记录了。
在 NAS 中定时执行下面这段脚本,脚本实际上是发送了一条 API Post,将当前的 IP 地址发送到这条记录。
curl -X POST https://dnsapi.cn/Record.Ddns -d 'login_token=【API Token ID】,【API Token 密钥】&format=json&domain=【域名】&record_id=【记录的ID】&record_line=默认&sub_domain=【域名的前缀】'
这几种分支都能实现 DDNS 动态解析。
但是做到这里,大概率还是不能直接访问,因为路由器端还没有做端口转发的设置,外部的请求在路由器这里被拦截了下来。所以接下来看看如何配置路由器的端口转发。
💡 TIPS:端口转发,实现 NAS 开放到外网
一台 NAS 上可以同时提供多种服务,这些服务会采用不同的端口。这里就要用到端口映射,让你从外网顺利地访问 NAS 的各种服务。
- 端口:如果把 IP 地址比作房子,那么端口可以理解为一扇门,端口最多可以有 65535 个,也就是 2¹⁶–1 个。不同的门可以用于提供不同的服务。比如网页服务通常采用 80 端口,FTP 服务通常采用 21 端口,群晖的管理页面被设为 5000 端口。
- NAT:网络地址转换,就是把本地地址(如
192.168.1.200
)转换为全球可访问的 IP 地址(就是公网 IP)。目前使用最广泛的就是端口多路复用,让局域网内所有设备共享一个外部 IP,通过端口来识别不同设备和服务,最大程度节省 IP 资源。 - 端口映射:端口映射是 NAT 地址转换的一种,想要让 NAS 对外网开放服务、接收数据,都需要端口映射。通常实现方法是在网关(路由器)上开放一个端口如
86
,然后将这个端口接收到的数据映射到 NAS 的80
端口上。这样在外网访问http://外网IP:86
时,实际访问到的页面就是http://192.168.1.200:80
,即 NAS 的网页服务器。 - 端口转发:端口转发(Port Forwarding)和端口映射(Port Mapping)作用类似,但原理有所不同。简单讲就是「转发关系」和「对应关系」的区别,转发的安全性稍高一些。在 NAS 这里讲到,一般都是为了实现同一个目标,不必过于强调两者区别。
- 网关:可以理解为网络的关卡,连接两个不同网络的设备都可以叫网关,家庭场景下通常就是路由器。
通过配置端口转发,可以绕过运营商对 80、443 等常用端口的封锁。
配置端口转发
端口转发实际上是路由器的事,路由器中通常有多种描述——端口映射、DMZ 和 UPnP,他们分别是什么意思,又能做什么,到底怎么配置呢?
下面是对端口映射、DMZ 和 UPnP 的详细解释。
端口映射:就是将路由器的端口与 NAS 的端口之间连上线,建立起联系。当你访问路由器时,就会将请求自动转到映射的端口上。端口映射能够绕过一些限制,也可以避免将 NAS 的真实端口暴露到外网。
通俗地讲,比如你想让 NAS 在 80 端口上运行网页服务器。但运营商通常会封掉网页访问常用的 80 端口,导致我们无法正常访问 NAS 的网页服务器。那就可以将 NAS 的 80 端口和路由器的 86 端口映射起来,你就可以通过 180.63.xxx.44:86
的形式来访问 NAS 的网页服务器了。
DMZ 功能:全称是 Demilitarized Zone,隔离区。它能够解决外部访问会被防火墙阻挡,导致不能访问内部网络服务器的问题,既能将局域网内的一台设备完全暴露给互联网,又能保护其他局域网设备的安全。
DMZ 就是为了让外网能访问内部的资源。如果为 NAS 开启了 DMZ,相当于映射了所有的端口。当外部设备访问你的路由器 IP 的 8080 端口时,就会直接访问 NAS 的 8080 端口,不会影响其他电脑的运行。但相应的,NAS 本身的其他端口同样能被外部访问,有潜在的安全隐患。
UPnP 功能:全称是 Universal Plug and Play,通用即插即用。如果不想了解背后的原理,可以简单的理解为「自动端口映射」。它的作用是 NAS 可以向路由器请求自动进行端口转换。
但是 UPnP 需要由操作系统、应用、路由器协商开放特定的端口,必须同时满足支持 UPnP 才能使用,如果你在路由器中看到了一些凭空出现的端口映射条件,很可能是某些服务通过 UPnP 自动创建的。
路由器设置
推荐方案:这三者有各自的应用场景,也可以同时开启。比较推荐的方案是做如下操作——
- 对运营商屏蔽的
80
端口进行端口映射,映射到86、87
等其他端口。 - 对一些常用服务的端口(比如 DSM 的
5000
、WebDAV 的5005
、5006
)进行端口映射的配置,和外网一一对应即可。 - 开启 UPnP 允许服务自行创建端口。
如果依然无法访问,最后再试试为 NAS 开启 DMZ 功能。开 DMZ 时要注意内网安全。
如果你不知道群晖的服务用了哪些端口,可以参考《Synology 服务使用哪些网络端口?》进行查询。
如果开了 DMZ 再不行,就要试试内网穿透了。
方案五:无公网 IP 时,内网穿透方案
内网穿透是为没有公网 IP 的用户提供的方案。
💡 TIPS:内网穿透,实现无公网 IP 访问 NAS
国内大多数普通家庭都没有静态 IP,有时候甚至没法申请到公网 IP,所以通常要借助内网穿透技术来实现「外网稳定访问 NAS」这一目标。
内网穿透的定义是「不同局域网内的主机之间通过互联网进行通信的技术」。可以简单地理解为「让外网设备顺利访问本地应用的技术」,典型的实用场景是在外网打开本地局域网中的 NAS。
上面的方案三,通常就使用到了内网穿透方案,实现无公网 IP 访问 NAS。
在内网穿透方面,有不少开源项目可以使用,比较常见的是 Ngrok、FRP、NPS 等方案。
但是难点在于,你除了需要购买域名,还需要自己租用一台外部服务器,作为实现 DDNS 的中转服务器。
注意:Ngrok 和 FRP 的的配置工作非常冗长,不同的网络环境下,你需要具备解决配置过程中遇到的问题的能力,可能需要额外学习配置 Linux 服务器、网络配置、防火墙配置等相关知识。也正因如此,如果你只希望能够让 NAS 可以远程访问,那么前几个方案已经足够达成目标了,不太推荐新手在这方面花费太多时间。
如果你想了解一下配置的流程,推荐阅读博客里的这篇文章《用开源免费的内网穿透工具 frp,实现远程桌面和文件传输》,文中将 frp 的配置流程写得非常清晰,是针对 PC 电脑配置的方案。你可以借此预估一下配置工作量,来决定是否需要操作。
本文中我简述一下在 NAS 端的配置过程。
Ngrok 方案
Ngrok 步骤概述:
- 安装 Linux 环境(虚拟机、服务器端均可)。
- 在 Linux 环境下获取 Ngrok 源码并进行编译,生成分别用于服务端和客户端的文件。
- 配置域名的解析记录、为域名生成证书。
- 在服务器端部署 Ngrokd 文件,通过指定的证书、域名、端口来启动 Ngrok 服务。
- 在 NAS 端部署 Ngrok 文件。
- 完成,可以尝试在外网访问 NAS 了。
如果嫌麻烦,可以通过网友编写的一键部署脚本,在服务端快速完成安装。
🔗 Ngrok 服务器端一键部署脚本(网友 @clangcn 编写)
最终可以实现在远程访问 https://powerplus.myds.me
直接跳转到 https://powerplus.myds.me:443
上,并且不需要有公网 IP。
FRP 方案
FRP 同样是一个具备内网穿透、反向代理功能的应用。FRP 的配置相对简单,可以不用编译,修改 frps.ini 文件和安装服务的方式进行配置。
大致的做法也是在外部设备和内网设备上安装 FRP 服务端和客户端,配置之后能够实现外网访问。访问速度由 VPS 的速度限制。
由于涉及到大量代码,需要详细步骤的可以在它的官方 Github 找到中文教程并一步一步跟着操作。
基于开源方案的小服务商
还有很多基于 Ngrok、FRP 二次开发的小服务商,如 Ngrok.cc 、Natapp.cn 等。他们提供或免费或付费的服务,嫌自己租服务器和配置麻烦的朋友,可以寻求他们的帮助。
较难实现远程访问的情况
在国内的网络环境下实现外网访问是有一些客观难题的,除了开头提到的公网 IP 问题和上下行带宽问题,还有几种比较难以实现远程访问的情况,这里给出一些参考建议。
Q:运营商封锁了我家的 80、443 端口,导致无法访问,怎么解决?
A:通过端口映射从其他端口(如 86 端口)访问 NAS 的 80 端口。
Q:我家是二级 ISP 服务商,比如长城宽带,他们不提供公网 IP 怎么办?
A:首先要尽力申请公网 IP,如果实在不提供,实现外网访问的可能性很低。可以尝试做内网穿透方案,但为了长远考虑,还是建议考虑更换宽带服务商。
Q:我的路由器不支持/找不到端口转发等设置?
A:可以先通过 QuickConnect 或 EZ-Internet 尝试自动配置,如果依然不行,建议更换路由器。如有动手能力且路由器支持,可以为路由器刷 OpenWrt 之类的第三方固件。
Q:我家使用的是「电信定制光猫」等特殊网关,是不是不支持外网访问?
A:需要分情况讨论,通常有这几种解决方案:
- 常规方式是给运营商致电,申请将光猫改成桥接模式,再由路由器分配。(这一步相当于将光猫的工作放权给路由器来做,而路由器的限制会少一些)
- 购买第三方光猫替换原有光猫。如有动手能力,也可以尝试破解光猫,此处不细讲。
- 开启光猫的 DMZ 功能,直接映射到路由器或者 NAS。
其他可选操作
如何获取 HTTPS 认证
当你通过群晖的域名服务设置 DDNS 时,如果此前没有 SSL 证书,系统会自动分配给你一张 Let’s Encrypt 的免费证书。
SSL 证书的作用是传输数据添加一层加密防护。当你访问 NAS 的 HTTPS 网页、邮件、FTP 时,SSL 证书能够以加密的形式传输数据,保障数据不会被人攻击和恶意篡改。
HTTPS 证书的认证在「控制面板 - 安全性 - 证书」中新增证书,添加免费或付费的证书。
申请证书
证书添加完毕之后,还需要在「控制面板 - 安全性 - 证书」中点击「配置」,将新增的证书作为所有服务的默认证书。这样就配置完毕了。
配置证书
如何反向代理去掉端口号
端口号是一个麻烦的东西,包括在做 HTTPS 认证的时候,都会发现不支持带端口号的域名链接。我们可以通过反向代理的方式去掉端口号。
💡 TIPS:反向代理,实现免端口访问 NAS
如果通过端口映射、内网穿透的方式访问 NAS,每次访问都需要输入 http://域名:5000
这种形式的网址才能访问,如果一些服务不支持这种带端口的链接就会造成麻烦。所以有人会希望将端口隐去,直接访问 http://域名
就能获取到想要的网址,这就需要用到反向代理。
- 代理服务:简称为代理,本机和服务器进行数据交换时,利用一个中间设备进行非直接的连接,从而隐藏真实的信息。将 Proxy 翻译成代理很接近字面意思。
- 正向代理:使用本地设备 → 正向代理 → 目标服务器 → 返回内容,这样可以绕过限制访问目标服务器,同时能够隐藏本机的信息,代理的对象是「客户端」。这个应用场景大家都懂,不过这里用不到,需要使用反向代理。
- 反向代理:使用本地设备 → 反向代理 → 代理找到多个目标服务器中的一个 → 返回内容。类似于打客服电话,电话会被分配到不同的接线员,但你不清楚接线员的具体身份。代理的对象是「服务端」,也就是 NAS。这样做的好处主要是安全加密、负载均衡、外网发布,这里用到的作用就是外网发布。
反向代理这个词确实很不容易理解,这里一并解释了代理服务和正向代理是什么。
简单的说,反向代理就是为 NAS 上的各种服务(像是原本需要记住端口号的网页服务、WebDAV、FTP 服务)做一个配置,像给 10086 打客服电话一样,访问一个网址就能实现自动跳转。
最终实现的效果类似这样:访问 https://powerplus.myds.me/admin
实际进入的是 https://powerplus.myds.me:5000
这个页面。省去了 5000
这个端口。
这确实是一个很小的功能点,它的主要价值是「绕开国内对 80 端口的封锁」,让外部用户能像访问普通网站一样,访问自己的 NAS。
具体操作:
- 在「控制面板 - Synology 应用程序门户 - 反向代理服务器」中新增一条规则。
- 规则中需要填写来源主机名(域名)和端口、目的地主机名(被代理的 IP)和端口。比如这样填写:
来源
协议:HTTPS
主机名:nas.sspainas.com
端口:443
目的地
协议:HTTPS
主机名:192.168.1.200
端口:5001
就能在访问 https://nas.sspainas.com
时跳转到 5001 端口所在的管理界面了。
反向代理配置
反向代理还可以通过 nginx 等方案进行配置。
外网访问与分享文件技巧
有了外网访问功能,就可以在所有手机端应用中输入域名了,但有时候会因为传输速度较慢,为了提高速度,可以在手机端应用中输入包括端口名称的 IP 地址,通常是 nas.allen.com:5000
这种形式,以此来提高访问速度。
有了外网 IP 之后,就可以通过 Drive 对外分享文件了。但是由于端口号的存在,生成出来的链接就出现了错误。其实你完全可以选择让它是否带上端口号。
在「Synology Drive 管理控制台 - 设置 -其他 - 自定义共享链接」中,启用自定义共享链接,来设置一个带端口号的外网 IP。这样每次生成出来的链接就可以直接分享给外部人员了。
自定义域
总结
很多人总希望能三言两语讲清楚「远程访问 NAS」这件事情,实在是难度很高。因为各种名词的意思都需要解释,不同的情况需要考虑不同的对策,各个环节出现的问题也是千奇百怪。要总结出一套适用于每个人的方案实属不易。
本文的内容密度相当高,出现了大量平时不易涉及到的名词和概念。如果能理解其背后的含义和用途,会有助于更快完成远程访问的配置工作,并能通过正确的思路解决问题。
这一章可能是整个教程中最为复杂的一部分内容。我希望大家看完这一章节的内容,能够对外部访问这件事情有一个更清晰完整的认识,而不是只会跟着教程做。
学会了远程访问 NAS,NAS 才算是真正成为了一台家庭服务器,能在任意时间任意地点进行访问。
在接下来的文章中,我们将会介绍 NAS 的更多实际用途,相信有了远程访问的加成,NAS 的体验会变得更棒。